#ifndef MINIBANK_ACCOUNTUTILS_HH
#define MINIBANK_ACCOUNTUTILS_HH

#include <string>
#include "Transaction.hh"
#include <vector>

namespace minibank {

// Enum for account types
enum class AccountType {
    Savings = 21,  // Savings account
    Checking = 22  // Checking account
};

// Bank account structure
struct BankAccount {
    std::string accountId;
    AccountType type;
    double balance;
    std::vector<Transaction> transactions;

    BankAccount();  // Default constructor
    BankAccount(const BankAccount& other);  // Copy constructor
    BankAccount& operator=(const BankAccount& other);  // Copy assignment
    ~BankAccount();  // Destructor
};

// Utility class to generate account numbers
class AccountUtils {
public:
    static std::string generateAccountNumber(AccountType type);
};

} // namespace minibank

#endif // MINIBANK_ACCOUNTUTILS_HH